문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 스파게티 코드 (문단 편집) == 난독화 == 일부러 스파게티 코드로 만드는 경우. 주로 [[리버스 엔지니어링|리버싱]]을 방해하거나 읽어보는 사람에게 장난치기 위해 만든다. 주로 소스 코드를 컴파일하지 않고 그대로 배포하는 [[스크립트 언어]]에서 많이 쓰며, [[C##]]이나 [[Java]], [[ActionScript]] 같은 관리 언어[* 실행 파일을 기계어가 아닌 중간 언어(전자는 IL, 후자는 JVM 바이트 코드)로 컴파일하여 배포하는 프로그래밍 언어. 크로스플랫폼과 다양한 기능을 구현하기 위해 컴파일 시 간단한 수준의 최적화만 하기 때문에 후술하는 것처럼 악용되기도 한다.]의 경우 리버싱 툴(디컴파일러)을 사용하면 소스코드를 거의 원본 그대로(!) 뽑을 수도 있기 때문에 난독화 툴이 어느정도 필요하다. 그러나 프로그램 코드 자체는 컴파일러와 인터프리터가 최적화해버리기 때문에 원본 소스코드 그 자체가 유출되지 않는 이상은 복잡하게 바꿔도 별 의미가 없는 경우가 많다. 어차피 리버싱할 최종 결과물은 논리식이 간략화되어 있을 수밖에 없기 때문. [[JSFuck]]은 난독화가 어디까지 갈 수 있는지를 보여주는 예이다. * [[매크로]]를 이용해 흔한 표현도 뒤바꾼다 {{{#!syntax cpp #define a if( #define e else #define E return // 예시 main() { a 3 == 3 ) puts("1234"); e puts("5678"); E 0; } }}} * .net obfuscator 같은 난독화 툴을 쓴다. 이런 프로그램은 변수, 상수, 함수의 이름을 컴퓨터만 알아볼 수 있게 마구 섞어버리고, 보기에만 더 복잡한 같은 일을 하는 다른 논리식으로 바꿔친다. RTTI(RunTime Type Information) 같은 기술 구현의 문제 때문에 원래 실행시간에는 필요 없는 자료구조나 변수 크기 같은 정보도 프로그램에 포함되는데, 이 부분을 중점적으로 복잡하게 꼬아 사람이 읽기 힘들게 한다. 프로그램에 따라서는 소스코드의 순서나 include 관계도 등도 손보는 경우가 있다. [Include(틀:문서 가져옴, title=스파게티, version=125)] [[분류:프로그래밍]]저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기